from collections import Counter


# 比如0101  返回 1 1 1 2 。 输入是一个01的字符串，输出是将其分割成两部分后，能够使得“前半部分0的个数*后半部分1的个数=前半部分1的个数*后半部分0的个数”的数量。比如0没法分割，所以返回1；01分割后依然没有满足条件的，所以返回也是1；010也没有满足条件的也返回1；但是0101可以分割成01和01，有一种满足条件的分割方法，就返回2.
# 默认没有满足条件的情况下是返回1不是返回0 -> 0返回1是因为可以分割成0和空，1*0=0*0

def test(nums):
    res = []
    count = Counter()
    n0, n1 = 0, 0
    for num in nums:
        if num == 0:
            n0 += 1
        else:
            n1 += 1

        if n0 > 0:
            rate = n1 / n0
        else:
            rate = float("inf")

        count[rate] += 1
        res.append(count[rate])

    return res


if __name__ == "__main__":
    print(test([0, 1, 0, 1]))  # [1,1,1,2]
    print(test([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]))  # [1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
    print(test([1, 1, 0, 1, 1, 0, 1, 1, 0]))  # [1, 2, 1, 1, 1, 2, 1, 2, 3]
